package utils

// 数据库连接初始化
import (
	"fmt"
	"github.com/jmoiron/sqlx"
	_ "github.com/lib/pq"
)

// DB 数据库模型
var DB *sqlx.DB

//const dsn = "root:123456@tcp(127.0.0.1:3306)/golist"

type DataBaseConfig struct {
	Username     string `json:"username"`
	Password     string `json:"password"`
	Host         string `json:"host"`
	Port         string `json:"port"`
	Database     string `json:"database"`
	MaxOpenConns int    `json:"max_open_conns"`
	MaxIdleConns int    `json:"max_idle_conns"`
}

// connect 1.连接数据库
func Connect(config *DataBaseConfig) (err error) {
	//var dsn = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?parseTime=true&loc=Local",
	//	config.Username, config.Password, config.Host, config.Port, config.Database)

	var dsn = fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=disable",
		config.Host, config.Port, config.Username, config.Password, config.Database)
	//timezone := "'Asia/Shanghai'"
	//dsn = dsn + "&time_zone=" + url.QueryEscape(timezone)

	DB, err = sqlx.Connect("postgres", dsn)
	if err != nil {
		fmt.Println("数据库连接失败==>", err)
		return
	}

	if config.MaxOpenConns == 0 || config.MaxIdleConns == 0 {
		DB.SetMaxOpenConns(20) // 设置连接池最大连接数
		DB.SetMaxIdleConns(20) // 设置连接池最大空闲连接数
	} else {
		DB.SetMaxOpenConns(config.MaxOpenConns) // 设置连接池最大连接数
		DB.SetMaxIdleConns(config.MaxIdleConns) // 设置连接池最大空闲连接数
	}
	DB.SetConnMaxLifetime(0)

	fmt.Println("数据库已连接！")
	return
}
